// arrows in main
// disparo de las flechas
int flecha_speed  = 6;                                                          // velocidad de las flechas  
 
void crea_flecha()
{
    flecha.createxturas ("sprites/flecha.dat");
    /* clear fballs coordinate array */
    for (int i=0;i<6;i++)
    {
        flechas[i].x=0;            //  x 
        flechas[i].y=0;
        flechas[i].activo=false;   // desativa los sprites.
    }
}    

void arrow_fire()
{
   static int iTmpDisparo;                                                      // variable para calcular el tiempo
   int firedelay=350;
   if ( (SDL_GetTicks() - iTmpDisparo) < firedelay)  return;                    // sale si es menor, velocidad de disparo en 350
   iTmpDisparo = SDL_GetTicks();                                                // averigua el tiempo transcurrido
   for (int i=0;i<6;i++)                                                        // busca un disparo no activo y si lo hay
    if (flechas[i].activo==false)                                               // deja disparar
       {
         Sflecha.play();
         flechas[i].activo=true;                                                // activa el diparo.
         flechas[i].y=int(popolon.y)-32;                                        //y
         flechas[i].x=int(popolon.x)+16;                                        // x
         break;                                                                 // sale del bucle
        }                     
}

void arrows_move (double mappos)
{ 
  bool vbonus;
  SDL_Rect recta;
  SDL_Rect rectb;
  for (int i=0;i<6;i++)                                                         // recorre el bucle
    if (flechas[i].activo==true)                                                // meuve solo las flechhas que esten activas
    {
     if (flechas[i].y>-1) flechas[i].y-=flecha_speed;                                                // dec y segun velocidad
		else
		{
			flechas[i].activo=false;                                               // desacriva la flecha                         
			continue;                                                              // salta a la siguiente posicion del bucle
		}
     /* controla si el arma es simple o doble */
	 switch (arma)
		{
			case 0:  /* simple */
					flecha.y=flechas[i].y;
					flecha.x=flechas[i].x;
					flecha.pinta();
					flecha.rect.w=8;
					break;
			case 1: /* doble */ 
					flecha.y=flechas[i].y;
					flecha.x=flechas[i].x-10;
					flecha.pinta();
					flecha.y=flechas[i].y;
					flecha.x=flechas[i].x+10;
					flecha.pinta();
					flecha.rect.w=24; 
					break;
		}
      /* Chequea colisiones con sprites simples */
      /* medusa*/ 
     if (medusaestado==1)
		{
         if (flecha.collision(&medhead.rect))
            {
                flechas[i].activo=false;
                medusavida--;
                Sbosshit.play();
            }
        } /* medusa collision check end */
       /* Muerte, Nivel 2 */
     if (muerteestado==1)
       {
         if (flecha.collision(&deathhead.rect))
            {
                flechas[i].activo=false;
                muertevida--;
                Sbosshit.play();
			}
       }
       /* option */
     if (option.visible==true) // comprueba las colisiones solo si esta activo el sprite
       {
         if (flecha.collision(&option.rect))                              
			{
				if (optiondir<1) optiondir=1;
					else optiondir=-1;
				Soptionclik.play();
				option.animpos++;
				if (option.animpos>4) option.animpos=0;
				option.animstart=int(option.animpos);
				flechas[i].activo=false;                                             // desactiva la flecha 
			} // end if                                                                        
		} // end if
       /* oprion de armas */
     if (optionw.visible==true ) 
        {
          if (flecha.collision(&optionw.rect))                                     
           {
				if (woptiondir<1) woptiondir=1;
					else woptiondir=-1;
				Soptionclik.play();
				if (optionw.animpos<2) optionw.animpos=2.0;                         
					else optionw.animpos++;
				if (optionw.animpos>9) optionw.animpos=0;
				if (arma==0 && optionw.animpos==2) optionw.animpos=3;               // si tienes flechas simples salen dobles.
				if (optionw.animpos==9) optionw.animpos=0;               // si son flechas de fuego
				if (optionw.animpos==7) optionw.animpos=8;               // si son cuchillos
				if (optionw.animpos==9) optionw.animpos=0;               // si son flechas de fuego
				flechas[i].activo=false;                              
           } // if       
        } // iff     
     /* chequea las colisiones con otros objetos con vector */
     for (int a=0;a<6;a++)    
       {
		 if (flechas[i].activo==true)                                                // meuve solo las flechhas que esten activas
			{
				/* check collsiopm arrows with bats */
				if (arma==0) 
					{ 
						recta.x=flechas[i].x;
						recta.y=flechas[i].y;
						recta.w=8;                       // dimesion de la flecha
						recta.h=32;                     // is single arrow?
					}
					 if (arma==1) 
					{
						recta.x=flechas[i].x-10;
						recta.y=flechas[i].y;
						recta.w=24;
						recta.h=32;                 // is double arrow?
					}
				 /* colision con nubes */
				 if (a<3 && cloudss[a].hit==false)                                             
				   {
						rectb.x=int(cloudss[a].x);rectb.w=clouds.w;
						rectb.y=int(cloudss[a].y);rectb.h=clouds.h;
					    if (flecha.colbox(&recta,&rectb))
						{
							Sras.play();
							cloudss[a].hit=true;
							cloudss[a].dir=0;
							if (cloudss[a].x>(popolon.x)+10) cloudss[a].dir=-((cloudss[a].x / popolon.x)  );
							if (cloudss[a].x<(popolon.x)-10) cloudss[a].dir= (popolon.x /cloudss[a].x) ;
						}
					} /* clouds collision check end */
                 if (a<2 && evils[a].activo)
                    {
                        rectb.x=evils[a].x;rectb.w=32;
                        rectb.y=int(evils[a].y);rectb.h=32;
                        if (flecha.colbox(&recta,&rectb))
                        {
                            Sras.play();
                            evils[a].activo=false;
                            flechas[i].activo=false;
                            puntos+=100;
                            for (int b=0;b<128;b++)	if (rass[b].activo==false) // busca uno que no este activo 
							{
                                rass[b].activo=true;
                                rass[b].x=evils[a].x;
                                rass[b].y=evils[a].y;
                                break;
                            }
                        }
                    } // Evils check end;
                 /* grupos de 6 */				
				 if (fuegos[a].activo==true)
				    {
                        rectb.x=fuegos[a].x;rectb.w=32;
                        rectb.y=fuegos[a].y;rectb.h=32;
                        if (flecha.colbox(&recta,&rectb))
                        {
                            fuegos[a].activo=false;
                            flechas[i].activo=false;
                            puntos+=100;
                            Sras.play();
                           	for (int b=0;b<128;b++)	if (rass[b].activo==false) // busca uno que no este activo 
							{
                                rass[b].activo=true;
                                rass[b].x=fuegos[a].x;
                                rass[b].y=fuegos[a].y-32;
                                break;
                            }
                            vbonus=true;
                            for (int b=0;b<6;b++) if (fuegos[b].activo==true) vbonus=false;
                            if (vbonus) 
                            {
                                bonus.visible=true;
                                bonus.x=fuegos[a].x;
                                bonus.y=fuegos[a].y-32;
                                Tbonus.set_time(5);
                                puntos+=1000;
                            }   
                        }
                    }
                 if (batss[a].activo==true)
					{
						/* bats rect */
						rectb.x=int(batss[a].x); // x 
						rectb.y=int(batss[a].y); // y
						rectb.w=32;
						rectb.h=32;
						/* check colision */
						if (flecha.colbox(&recta,&rectb))                       // if collision exists 
						{
							Sras.play(); 
							batss[a].activo=false;                              // clear bat in pos
							flechas[i].activo=false;                            // desactiva la felcha
							puntos+=100;                                        // suma puntos
                            for (int b=0;b<128;b++) if (rass[b].activo==false)  // estan todos muertos? 
							{
	    					    rass[b].activo=true;                            // lo activa
    						    rass[b].y=flechas[i].y-recta.h;                 // ras y position = arrowposy- sprite.h
	   							rass[b].x=flechas[i].x-recta.w;                 // x
								break;
							}
							vbonus=true;                                        // siempre hay bono
                            for (int b=0;b<6;b++) if (batss[b].activo==true) vbonus=false; // si hay alguno vivo no hay bono
                            if (vbonus)                                         // si ahy bono lo muestra
                            {
                                bonus.visible=true;
                                bonus.x=batss[a].x;
                                bonus.y=batss[a].y-64;
                                Tbonus.set_time(5);
                                puntos+=1000;
                            }
						} //  if
					} /* check bats end */
				 if (batss_zz[a].activo==true)
					{
						/* bats rect */
						rectb.x=int(batss_zz[a].x);rectb.w=32;
						rectb.y=int(batss_zz[a].y);rectb.h=32;
						if (flecha.colbox(&recta,&rectb))                       // hay colision?
						{
							Sras.play(); 
							batss_zz[a].activo=false;                           // clear bat in pos
							flechas[i].activo=false;                            // desactiva la felcha
							puntos+=100;                                        // suma puntos
                            for (int b=0;b<128;b++)	if (rass[b].activo==false)  // busca uno que no este activo 
							{
								rass[b].activo=true;                            // lo activa
								rass[b].y=flechas[i].y-recta.h;                 // ras y position = arrowposy- sprite.h
								rass[b].x=flechas[i].x-recta.w;                 // x
								break;
							}
							vbonus=true;
							for (int b=0;b<6;b++) if (batss_zz[b].activo==true) vbonus=false;
							if (vbonus)
							{
                                bonus.visible=true;
                                bonus.x=batss_zz[a].x;
                                bonus.y=batss_zz[a].y-64;
                                Tbonus.set_time(5);
                                puntos+=1000;
                            }
						} //  if
					} /* batss_zz check end */
				 if (batss_spl[a].activo==true)
					{
						/* bats rect */
						rectb.x=int(batss_spl[a].x); // x 
						rectb.y=int(batss_spl[a].y); // y
						rectb.w=32;
						rectb.h=32;
						/* check colision */
						if (flecha.colbox(&recta,&rectb))                       // if collision exists 
						{
							Sras.play(); 
							batss_spl[a].activo=false;                          // clear bat in pos
							flechas[i].activo=false;                            // desactiva la felcha
							puntos+=100;                                        // suma puntos
                            for (int b=0;b<128;b++) 
							if (rass[b].activo==false)                          // busca uno que no este activo 
							{
								rass[b].activo=true;                            // lo activa
								rass[b].y=flechas[i].y-recta.h;                 // ras y position = arrowposy- sprite.h
								rass[b].x=flechas[i].x-recta.w;                 // x
								break;
							}
							vbonus=true;
							for (int b=0;b<6;b++) if (batss_spl[b].activo==true) vbonus=false;
							if (vbonus)
							{
                                bonus.visible=true;
                                bonus.x=batss_spl[a].x;
                                bonus.y=batss_spl[a].y-64;
                                Tbonus.set_time(5);
                                puntos+=1000;
                            }
						} //  if
					} /* batss_spl check end */
				 if (batss_spr[a].activo==true)
					{
						 /* bats rect */
						 rectb.x=int(batss_spr[a].x); // x 
						 rectb.y=int(batss_spr[a].y); // y
						 rectb.w=32;
						 rectb.h=32;
						 /* check colision */
						if (flecha.colbox(&recta,&rectb))                       
						{
							Sras.play(); 
							batss_spr[a].activo=false;                          
							flechas[i].activo=false;                            
							puntos+=100;                                        
							for (int b=0;b<128;b++) 
							if (rass[b].activo==false)                          
							{
								rass[b].activo=true;                            
								rass[b].y=flechas[i].y-recta.h;                 
								rass[b].x=flechas[i].x-recta.w;                 
								break;
							}
						    vbonus=true;
							for (int b=0;b<6;b++) if (batss_spr[b].activo==true) vbonus=false;
							if (vbonus)
							{
                                bonus.visible=true;
                                bonus.x=batss_spr[a].x;
                                bonus.y=batss_spr[a].y-64;
                                Tbonus.set_time(5);
                                puntos+=1000;
                            }
                        } //  if
					} /* check end */
				/* colision con huesos andarines */ 
				 if (bones[a].activo==true)
					{
						 rectb.x=int(bones[a].x);
						 rectb.y=int(bones[a].y);
						 rectb.w=32;
						 rectb.h=32;    
						/* check colision */      
						if (flecha.colbox(&recta,&rectb) && bones[a].assm==true)                                     
						{
							bones[a].hit++;
							bones[a].assm=false;
							bones[a].head=bones[a].x;
							bones[a].body=bones[a].x;
							flechas[i].activo=false;                                            // desactiva la flecha
							if (bones[a].hit==3)  // MAX HITS 
							{
								Sras.play();
								for (int b=0;b<128;b++) 
								if (rass[b].activo==false) 
								{
									rass[b].activo=true;
									rass[b].y=int(bones[a].y);
									rass[b].x=int(bones[a].x);
									break;
								}
								bones[a].activo=false;
								bones[a].hit=0;                                                                                               
								puntos+=100;
							} // if end
						} // if end
					} // if end
				 if (bugs[a].activo==true)
					{
						rectb.x=bugs[a].x;
						rectb.y=bugs[a].y;
						rectb.w=32;
						rectb.h=32;    
						if (flecha.colbox(&recta,&rectb)) /* check collsion */
						{
							Sras.play();
							for (int b=0;b<128;b++) 
							if (rass[b].activo==false) 
							{
								rass[b].activo=true;
								rass[b].y=bugs[a].y;
								rass[b].x=bugs[a].x;
								break;
							}
							bugs[a].dir=0;
							bugs[a].activo=false;                                             // desactiva el buble                                                      
							flechas[i].activo=false;                                             // desactiva la flecha
							puntos+=100;                                                   
						} // if
					} /* check end */
				 if (bubless[a].activo==true)
					{
						 /* bubles rect */
						 rectb.x=bubless[a].x;
						 rectb.y=bubless[a].y;
						 rectb.w=32;
						 rectb.h=32;    
						if (flecha.colbox(&recta,&rectb))                                     
						{
							Sras.play();
							for (int b=0;b<128;b++)  if (rass[b].activo==false) 
							{
							  rass[b].activo=true;
							  rass[b].y=bubless[a].y;
							  rass[b].x=bubless[a].x;
							  break;
							}
							bubless[a].activo=false;                                             // desactiva el buble                                                      
							flechas[i].activo=false;                                             // desactiva la flecha
							puntos+=100;                                                   
						} // if
					} /* check end */
				 if (knights[a].activo==true)
					{
						rectb.x=knights[a].x;
						rectb.y=knights[a].y;
						rectb.w=32;rectb.h=32;
						if (flecha.colbox(&recta,&rectb))                                     
						{
							Sescudo.play();
							flechas[i].activo=false;                                            // turn off arrow sprite      
							knights[a].hits+=1;                                                 // inc knight hits
							if (knights[a].hits>3)
							{
							   Sras.play();
							   for (int b=0;b<128;b++) if (rass[b].activo==false) 
							   {
								  rass[b].activo=true;
								  rass[b].y=knights[a].y; // y ras position
								  rass[b].x=knights[a].x; // x ras position
								  break;
								}
							  puntos+=500;
							  knights[a].activo=false;                                                   // turn sprite off
							  knights[a].hits=0;                                                     // resert hit counter      
							}// if end
						}
			       } /* knigth check end */ 
            } // if end
		} // for enf
    } //end if flechas.activo
}
